package ycl.common.utils;

/**
 * 枚举工具
 *
 * @author YCL
 * @date 2021/12/21 15:54:39
 */
public class EnumUtil {


	/**
	 * 根据下标获取枚举, 没找到不抛异常
	 *
	 * @param index   下标
	 * @param objects 对象
	 * @param <E>     任意枚举类
	 * @return 单个枚举类对象
	 */
	public static <E extends Enum<E>> E getByIndex(int index, Object[] objects) {
		return getByIndex(index, false, null, objects);
	}

	/**
	 * 根据下标获取枚举, 没找到时由调用者决定要不要抛异常
	 *
	 * @param index   下标
	 * @param thr     是否抛异常
	 * @param msg     异常消息提示
	 * @param objects 对象
	 * @param <E>     任意枚举类
	 * @return 单个枚举类
	 */
	public static <E extends Enum<E>> E getByIndex(int index, boolean thr, String msg, Object[] objects) {
		int size = objects.length;
		if (index < 0 || size < index)
			return isThrow(thr, msg);
		int i = 0;
		index++;
		for (Object v : objects) {
			if (++ i == index)//枚举的下标从1开始
				return (E) v;
		}
		return isThrow(thr, msg);
	}

	/**
	 * 没有获取到数据时要不要抛异常
	 *
	 * @param thr 是否抛异常
	 * @param msg 异常提示
	 * @param <E> 无实义
	 * @return 抛异常或返回空
	 */
	private static <E extends Enum<E>> E isThrow(boolean thr, String msg) {
		if (thr)
			throw new IllegalArgumentException(msg);
		else
			return null;
	}

}
